VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "ApiMSG"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Ext_KEY = "SavedWithClassBuilder" ,"Yes"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
Option Explicit

Private Type MSG
    hWnd As Long
    Message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As Long 'MSG
End Type

Public hWnd As Long
Public Message As Long
Public wParam As Long
Public lParam As Long
Public time As Long
Public pt As APIPoint

Public CreatedOK As Boolean

'\\ Private memory handling functions
Private Declare Sub CopyMemoryMSG Lib "kernel32" Alias "RtlMoveMemory" (Destination As MSG, ByVal Source As Long, ByVal Length As Long)
Private Declare Function IsBadReadPtrMSG Lib "kernel32" Alias "IsBadReadPtr" (ByVal lp As Long, ByVal ucb As Long) As Long
Private Declare Function IsBadWritePtrMSG Lib "kernel32" Alias "IsBadWritePtr" (ByVal lp As Long, ByVal ucb As Long) As Long

'\\ --[CreateFromPointer]---------------------------------------------
'\\ Fills this MSG object from the location poiunted to by
'\\ lpMSG
'\\ VB.NET Porting note: This function should be replaced with an override
'\\ of the New() for corMSGness
'\\ ----------------------------------------------------------------------------------------
'\\ (c) 2001 - Merrion Computing.  All rights  to use, reproduce or publish this code reserved
'\\ Please check http://www.merrioncomputing.com for updates.
'\\ ----------------------------------------------------------------------------------------
Friend Function CreateFromPointer(lpMSG As Long) As Boolean

Dim ftThis As MSG


CreatedOK = False

If Not IsBadReadPtrMSG(lpMSG, Len(ftThis)) Then
    Call CopyMemoryMSG(ftThis, lpMSG, Len(ftThis))
    If Err.LastDllError = 0 Then
        With ftThis
            .hWnd = .hWnd
            .lParam = .lParam
            .Message = .Message
            .time = .time
            .wParam = .wParam
            Set pt = New APIPoint
            If pt.CreateFromPointer(.pt) Then
                If Err.LastDllError = 0 Then
                    CreatedOK = True
                End If
            Else
                Set pt = Nothing
            End If
        End With
    End If
End If

CreateFromPointer = CreatedOK

End Function
